小编典典

“__block”关键字是什么意思?

all

__blockObjective-C 中的关键字究竟是什么意思?我知道它允许您修改块内的变量,但我想知道......

  1. 它到底告诉编译器什么?
  2. 它还有其他作用吗?
  3. 如果这就是它的全部作用,那么为什么首先需要它呢?
  4. 它在任何地方的文档中吗?(我找不到它)。

阅读 197

收藏
2022-03-15

共1个答案

小编典典

它告诉编译器,任何由它标记的变量在块内使用时都必须以特殊方式处理。通常,块中也使用的变量及其内容会被复制,因此对这些变量所做的任何修改都不会显示在块之外。当它们被标记时__block,在块内完成的修改在块外也可见。

有关示例和更多信息,请参阅Apple 的 块编程主题中 的 __block
存储类型

__

重要的例子是这个:

extern NSInteger CounterGlobal;
static NSInteger CounterStatic;

{
    NSInteger localCounter = 42;
    __block char localCharacter;

    void (^aBlock)(void) = ^(void) {
        ++CounterGlobal;
        ++CounterStatic;
        CounterGlobal = localCounter; // localCounter fixed at block creation
        localCharacter = 'a'; // sets localCharacter in enclosing scope
    };

    ++localCounter; // unseen by the block
    localCharacter = 'b';

    aBlock(); // execute the block
    // localCharacter now 'a'
}

在此示例中,在调用块之前修改localCounter和。但是,在块内部,由于关键字localCharacter,只有对的修改可见。相反,块可以修改,并且这种修改在块外是可见的。localCharacter``__block``localCharacter

2022-03-15